// 类的声明其实就是一个function
function user(){
    // 相当于公共变量
    this.name = "people1";
    this.age = 26;
    // 相当于私有变量
    var email = "ttt@163.com";
    // 相当于公共方法
    this.getEmail = function(){
        return email;
    };
}

// 另一种类的声明
var person = {
    name: "people2",
    age: 26
};

function testCreateClass(){
    var u = new user();
    alert(u.name);
    alert(person.name + person['age']);
}

// new的方式创建一个Ext的Window
function testNewExtWindow(){
    var win = new Ext.window.Window({
        width: 400,
        height: 300,
        title: "win1"
    });
    win.show();
}

// 弹出一个Ext的Window
function testClickExtWindow(){
    // 绑定事件
    Ext.get("btn").on("click", function(){
        var win = new Ext.window.Window({
            width: 400,
            height: 300,
            title: "win2"
        });
        win.show();
    });
}

// 方法的别名
function testExtFunctionAlias(){
    var o = {
        say : function(){
            alert(111);
        }
    };
    var fn = Ext.Function.alias(o, 'say');
    fn();
}

// create方式创建一个Ext的Window，Extjs4推荐使用这种方法来创建Ext对象
// Ext.create是Ext.ClassManager.instantiate的别名
function testCreateExtWindow(){
    // 可以按类名、别名来创建
    var win = Ext.create("Ext.window.Window", {
        width: 400,
        height: 300,
        title: "win3"
    });
    win.show();
}

// 自定义类并扩展
function testDefineClass(){
    Ext.define("MyWin", {
        extend: "Ext.window.Window",
        width: 500,
        height: 400,
        title: "win4",
        newTitle: "newWin",
        setTitle: function(){
            this.title = this.newTitle;
        },
        initComponent: function(){
            this.setTitle();
            this.callParent(arguments);
        }
    });
    Ext.create("MyWin",{
        title: "win5"
    }).show();
}
    
// 按需异步加载脚本
function testRequiresJs(webroot){
    Ext.Loader.setConfig({
        enabled: true,
        paths: {
            // 命名空间，注意路径最好使用绝对路径，相对路径是根据当前的访问地址的！
            "module": webroot + "/script/module"
        }
    });
    Ext.create("module.ns.UWin", {
        title: "win6",
        // Ext.class.requires: List of classes that have to be loaded before instantiating this class
        // 包名和文件路径的对应
        requires: ["module.ns.UWin"]
    }).show();
}

// config自动生成get/set方法
function testDefineConfig(){
    Ext.define("MyWin", {
        extend: "Ext.window.Window",
        width: 500,
        height: 400,
        title: "win4",
        config: {
            price: 500
        },
        // 初始化方法
        initComponent: function(){
            // 递归调用父类
            this.callParent(arguments);
        }
    });
    var win = Ext.create("MyWin", {
        price: 600 // TODO: 配置项和属性到底是怎么个继承和实例化的
    });
    alert(win.getPrice());
}

// mixins混合类似多继承
function testDefineMixins(){
    Ext.define('Say', {
        canSay: function() {
            alert("Say...")
        }
    });
    Ext.define('Sing', {
        canSing: function() {
            alert("Sing...")
        }
    });
    Ext.define('User', {
        mixins: {
            say: 'Say',
            sing: 'Sing'
        }
    });
    var user = Ext.create("User", {
        
    });
    user.canSay();
    user.canSing();
}

Ext.onReady(function(){
//    testCreateClass();
//    testNewExtWindow();
//    testClickExtWindow(); // 页面上的按钮
//    testExtFunctionAlias();
//    testCreateExtWindow();
//    testDefineClass();
//    testRequiresJs(Ext.get("webroot").getValue());
//    testDefineConfig();
//    testDefineMixins();
});

